
#pragma once

#include <string>
#include <vector>
#include "ly/types.hpp"

namespace ly {
class LayerProperties {
 public:
  LayerProperties(/* args */) {};
  LayerProperties(int l) : m_layer(l), m_datatype(0) {};
  LayerProperties(int l, int d) : m_layer(l), m_datatype(d) {};
  LayerProperties(int l, int d, const std::string& name) : m_layer(l), m_datatype(d), m_name(name) {};
  ~LayerProperties() {};

  std::string name() { return m_name; }

  void name(const std::string& name) { m_name = name; }

  void layer(int l) { m_layer = l; }

  int layer() { return m_layer; }

  void datatype(int d) { m_datatype = d; }

  int datatype() { return m_datatype; }

 private:
  std::string m_name;
  int m_layer;
  int m_datatype;
};

class Layers {
 public:
  Layers(/* args */) {};
  ~Layers() {};

  std::vector<layer_id_type> ids() {
    std::vector<layer_id_type> res;
    for (auto& [id, prop] : m_layer_props) {
      res.push_back(id);
    }
    return res;
  }

 private:
  //   std::vector<LayerProperties> m_layer_props;
  std::map<layer_id_type, LayerProperties> m_layer_props;
};

}  // namespace ly
